Developing and maintaining customised computer information systems

ABSTRACT

In one embodiment, a method or software development tools are provided which allow customised information systems, for example accounts receivable or stock control software, to be designed, implemented and maintained in less time than is generally presently required, whilst still providing a customised information system which conforms to the requirements of an industry, individual or an organisation. The invention also provides a customised information system in which the existing development steps of Analysis, Design, and Coding are transformed into a single Definition step.

TECHNICAL FIELD

[0001] The present invention relates to computerised information systems, and in particular, to the development and maintenance of customised software providing a customised information system. The present invention also generally relates to improvements on existing methods of designing, developing and maintaining customised information systems.

[0002] The present invention generally relates to an improved method of and new computer software for designing, developing and/or maintaining customised information systems.

BACKGROUND ART

[0003] Many organisations use computer systems (hereafter referred to as “Information Systems”) to record, process and retrieve information. Examples of the kinds of information stored in information systems could include accounts receivable, accounts payable, stock levels, and the like. There are two basic types of information systems available to these organisations. These types can be thought of as “packaged” and “customised”.

[0004] Packaged types refers to information systems (software) that can be bought, set-up and used immediately. Packaged types work in a manner that is general enough that they can be used by a wide range of organisations without being customised to suit specific organisational requirements.

[0005] Customised types refers to information systems (software) that are designed, developed and maintained specifically for an organisation, industry or application, generally to fulfil specific and/or unique requirements within that organisation, industry or application.

[0006] For many organisations, industries or applications, custom designed software works or performs better than packaged software. Packaged software is designed to be general, to allow it to be used successfully in a range of organisations, industries or applications. To achieve this, packaged software has to be, so to speak, “A jack of all trades, a master of none”. Whilst packaged software will perform many of the fictions that are required, it will usually not perform all, and it will not perform some functions in the best way for lo the particular use that the packaged software is put.

[0007] Organisations, industries or applications which use packaged software often expend time and effort preparing information to be entered into the packaged software (or packaged information system), and manipulating information output by the packaged software, so that the packaged software may be used effectively. Even with this extra ongoing manual effort, some functions may not be managed by the information system at all. Packaged software is presently almost always faster and cheaper to implement than customised software (or customised information systems), which is the primary reason for the existence of packaged software.

[0008] Custom designed software (or custom designed information systems) is specifically designed for an industry or an organisation, so the extra manual work required by packaged software is typically not required with a customised information system. A customised information system will generally be developed to do whatever the industry or organization wants, and contain all functionality required, with very little, if any, manual work required in preparing information to be input, or manipulating information that has been output from the customised software to make it useful.

[0009] However, customised information systems generally take a relatively long time to implement and maintain, and require highly skilled and specialised personnel to implement and maintain the customised information systems, and therefore are often very expensive and time consuming to implement and maintain.

[0010] The extra time and cost to implement a customised information system is often justified by the decreased manual work required by a customised information system, when compared to a packaged information system. For some industries or organisations, there may be no packaged system suitable for them to use, in which case customised systems are the only option.

[0011] Although customised information systems can fit an industry or organisation's requirements exactly, because of the time taken to develop and maintain a customised information system, customised information systems usually do not fit what is required today—they generally fit what was required a few months or a few years ago. By the time the customised information system has been fully implemented or modified to fit the current needs of an industry or organisation, those needs are often no longer the current needs—the requirements have changed.

[0012] For this reason, although customised information systems will fit an industry or an organisation better than packaged information systems, they do not fit perfectly, and are usually expensive. This time delay in developing a customised information system, and the high expense of customised information systems, means that many organisations simply cannot afford a customised information system, and thus use a packaged information system, with the inherent disadvantages involved in using a packaged information system, or do not use a computerised information system at all.

[0013] Presently, when developing a customised information system, there is a standard method that is followed. The various steps within the method may vary, but generally they include the following steps:

[0014] 1. Analysis (Work out what the information system needs to do)

[0015] 2. Design (Work out how the information system should do it)

[0016] 3. Coding (Make the information system do it)

[0017] 4. Testing (Test that the results of the Coding step fit the results of the Design step and the results of the Analysis step, and that the industry or organisation for which the information system is being developed is satisfied that the information system will fulfil requirements)

[0018] 5. Implementation (Render the information system up and running and able to be used by the industry or organisation, including loading any data required)

[0019] Most of these steps require not only intensive work, but also require thorough documentation of the results of that work. There is a danger that the analysis results of the first step will be misunderstood, displaced or corrupted when designing the information system, or that the design will be misunderstood, displaced or corrupted when coding or testing the information system. Thorough documentation is required to prevent these mistakes from occurring. Therefore, the presently known method not only requires the time taken to carry out each step of the method, but also requires time to be taken simply to ensure that the results of one step are carried successfully through to the next step.

[0020] For larger or complex customised information systems, the information system will often be broken into components, and then into sub-components, and the five step method will be carried out for each subcomponent. The results of the method for the previous component or sub-component are then built on when developing the next component or subcomponent. This is useful to ensure that the information system being developed or maintained conforms to requirements, but consumes time and increases the cost of the information system.

[0021] An information system consists of one or more databases, which in turn consist of a number of classes (in some systems called tables or files) which are related to each other. Each class contains instances which share the same possible list of attributes, but may contain different values against each of those attributes. Instances within classes can be related to instances within other classes. Classes within presently known systems tend to be related in a hierarchical manner. That is, some classes are clearly subservient to some other classes. This structure is illustrated in FIG. 1 (prior art).

[0022] The relationships between these classes are defined (duplicated or replicated) in every program that needs to derive data that is related to other data. That is, if a program needs to find all instances in class A that are related to a given instance(s) in class B, that program must understand how the data in class A is related to the data in class B. This makes programs longer and more difficult to write and to maintain, and means that it takes a relatively long time to implement and to maintain the programs, and requires highly skilled and specialised personnel to do so. This also means that programs must be changed when the relationships between classes changes. Programs that require this understanding include programs that validate data, that derive data, and that are used for searching or “drilling”.

[0023] For example, if a program needed to retrieve the values of the attribute “Amount” from the class “Invoice”, it could look like the following:

[0024] Variable=0

[0025] SELECT Invoice Class WHERE CustomerAttribute=“00001”

[0026] FOR Each InvoiceInstance Selected

[0027] GET Each InvoiceInstance

[0028] Variable+=InvoiceInstance.Amount

[0029] Most programs require recursion or looping—that is, repeating a series of instructions a number of times. This makes writing and maintaining these programs more difficult, more time consuming, more costly, and requires a high level of knowledge and skill. Most programs also require branching—the ability to choose which series of instructions within the program should be followed.

[0030] For example, if a program needed to retrieve the values of either the attribute “Amount” or the attribute “DiscountAmount”, depending on whether the customer received a discount or not, from the class “Invoice”, it could look like the following:

[0031] Variable=0

[0032] GET CustomerInstance FROM Customer Class FOR Customer “00001”

[0033] SELECT Invoice Class WHERE Customer Attribute=“00001”

[0034] FOR Each InvoiceInstance Selected

[0035] GET Each InvoiceInstance

[0036] IF CustomerInstance.DiscountFlag=‘Y’ THEN

[0037] Variable+=InvoiceInstance.DiscountAmount

[0038] ELSE

[0039] Variable+=InvoiceInstanceAmount

[0040] Programs are written to perform complicated validation, and to perform derivation Validation refers to ensuring that the data is correct. Derivation refers to calculating new data from other data. If programs are poorly written, the data will not be validated correctly, and derived data may not be calculated correctly. Programs should also be written to take into account that an update in one class may require updates in other classes, which may require updates in other classes, etc. Any failure for the programs to take this into account can result in the data that is stored within the system being inaccurate.

[0041] For example, if a program needed to validate that a particular customer was entitled to purchase a given product, it could look like the following. This example could be of a wholesaler which sells any quantity of any products to a retailer, but only sells a limited range of products to private individuals:

[0042] GET CustomerInstance FROM Customer Class FOR Customer “00001”

[0043] IF CustomerInstance.Type=‘Private’ THEN

[0044] GET ProductInstance FROM Product Class FOR SaleInstance.Product

[0045] IF ProductInstance.CustomerType NE ‘Private’ THEN

[0046] Error

[0047] As a further example, if a program needed to update a customer's balance whenever a new sale occurred, and whenever a payment was received, it could look like the following:

[0048] GET CustomerInstance FROM Customer Class FOR

[0049] SaleInstance.CustomerNumber

[0050] CustomerInstance.Balance+=SaleInstanceAmount

[0051] PUT CustomerInstance ON Customer Class FOR SaleInstance.CustomerNumber

[0052] GET CustomerInstance FROM Customer Class FOR

[0053] ReceivedInstance.CustomerNumber

[0054] CustomerInstance.Balance−=ReceivedInstanceAmount

[0055] PUT CustomerInstance ON Customer Class FOR

[0056] Received Instance.CustomerNumber

[0057] This identifies a need for an unproved method of and new computer software for designing, developing and/or maintaining customised information systems which overcomes or at least ameliorates the problems inherent in the prior art as discussed previously.

[0058] This also identifies a need to provide a means for classes within an information system not to be required to be solely related in a hierarchical manner. That is, although classes can be clearly subservient to some other classes, classes do not necessarily have to be related in a hierarchical manner as in the prior art. There is a need for classes to be able to be related in a more flexible manner.

[0059] Definitions:

[0060] Access to an information system is provided by terminals which are capable of requesting and receiving information from local or remote information sources. A terminal may be any type of computer or computerised device, a personal computer (PC), a mobile or cellular phone, a mobile data terminal, a portable computer, a personal digital assistant (PDA), a pager, a thin client, or any other similar type of electronic device. The capability of the terminal to request and/or receive information can be provided by an application program which may or may not be part of the information system, hardware or other such entity. A terminal may be provided with associated devices, for example an information storage device such as a hard disk drive.

[0061] An information source may be a server or any other type of terminal (for example, a PC computer) coupled to an information storage device (for example, a hard disk drive). The exchange of information (i.e., the request and/or receipt of information) between the terminal and the information source, or other terminal(s), is facilitated by a communication channel. The communication channel may be physically realised via a metallic cable (for example, a telephone line), semiconducting cable, an electromagnetic signal (for example, a radio frequency (RF) signal), an optical fibre cable, a microwave link, a satellite link or any other such medium or combination thereof connected to a network infrastructure.

[0062] The terms ‘data’ and ‘information’ are used within this document to assist in describing the scope of the present invention. For the purposes of describing and defining the present invention, the terms are taken to be interpreted as:

[0063] Data—The separate components which make up information. Individually, the components are not generally useful; an industry or organisation cannot use the data to determine the best action to take. As an analogy, data could be thought of as the bricks, mortar, wood and nails of a house. Separately, they are of no use; but when they are put together to form a house, they perform a useful purpose. An example of data might be a customer number, an amount of money, and a date. There is generally no useful action that can be taken with these the separate pieces of data.

[0064] Information—Data that has been put together in such a way as to be useful. To continue the analogy, a house can be thought of as bricks, mortar, wood and nails that have been put together in such a way as to be useful. An example of information might be a customer number, with a related amount of money due, with a related date due that is three months in the past. This is the same data used in the previous definition of data, but because the data has been put together in the right way, an organisation can now take appropriate action based on selected criteria. The appropriate action could be, for example, to refer a debt to a debt collector, or just call a customer and speak with them about a debt.

[0065] Generic object oriented terminology is used in this specification, but not exclusively. The following definitions are used to clarify terms in this specification.

[0066] Instance—Could also be called a record within a file, or a row within a table. An instance is a see, distinct item, stored among items of a similar type, within the system. For example, all orders are likely to be stored within the same class. Each separate order is an instance within that class.

[0067] Class—Could also be called a file or a table. All information of a particular type is stored in a particular class. For example, all orders are likely to be stored within one class, and all customer information is likely to be stored within another class.

[0068] Attribute—Could also be called fields on a file, or columns on a table. Every separate piece of data is stored as an attribute. For exile, an order class is likely to contain the following attributes: Order number, customer number, date, amount, delivery instructions, and so on. A customer class is likely to contain the following attributes: Customer number, name, address, phone number, fax number, credit limit, and so on.

[0069] Relationship Category—Refers to how data can be related to other data. Many different relationship types can fit within the one relationship category. Basically, data can be related to other data by being Not Equal (NE), Greater Than (GT), Greater than or Equal (GE), Equal (EQ), Less than or Equal (LE) or Less Than (LT) the other data. Relationship category is one of the two phrases used within this specification to describe the relationships between data. Relationship Type is the other phrase.

[0070] Relationship Type—Further defines, or narrows down, how data can be related to other data. Every relationship type fits within a relationship category. There are two basic reasons for there being multiple relationship types within one relationship category. 1. The first is that it is possible to define that a piece of data is related to one specific other piece of data, by defining that it is the first or last piece of other data to which it is related. For example, the relationship type <==(Less than or Equal Equal) belongs to relationship category LE, but refers to the one piece of other data that is less than or equal to the data, and is most equal. If there are multiple pieces of other data, the piece most equal to the data will be chosen. 2. Relationship types can be written in multiple ways, eg <# is equivalent to < and #<, yet they all belong to the same relationship category.

[0071] Program—Any series of instructions telling a computer what to do, and what order to do it in. Generally called a Method in Object Oriented terminology. Could also be called an applet, subroutine, module, script, batch, or function. There are other possible names also, not included here.

DISCLOSURE OF INVENTION

[0072] The present invention seeks to enable customised information systems to be designed, developed and/or maintained in less time than presently required by existing methods or software tools for developing customised information systems. The present invention combines neural networking theory with database design to achieve this.

[0073] In a preferred embodiment, the present invention seeks to provide software development tools which allow customised information systems (or software) to be designed, implemented and maintained in less time than is generally presently required, whilst still providing a customised information system which conforms to the requirements of an industry, individual or an organisation. The present invention also seeks to provide a customised information system which is more affordable. The present invention also seeks to provide a customised information system in which the existing development steps of Analysis, Design, and Coding are transformed into a single Definition step.

[0074] In a particular embodiment of the present invention there is provided a method of developing a customised information system, the method including the steps of:

[0075] Definition;

[0076] Testing; and

[0077] Implementation;

[0078] whereby, the definition step is used to define information which an industry or organisation requires in the customised information system by specifying how data used by the customised information system is related to other data used by the customised information system, in accordance with a relationship category, the specified relationship categories between the data being stored in at least one database accessible by the customised information system.

[0079] In another particular embodiment of the present invention there is provided a method of converting between data and information within customised computer software, the method including:

[0080] defining a relationship between each component of data which is entered into the customised information system, without a developer of the customized information system having to separately write computer program code to define such relationships; and

[0081] constructing information, the information being a grouping of selected components of the data, in accordance with the defined relationship between the selected data; and if required

[0082] deconstructing information, the information being a grouping of selected components of the data, the decons information providing data with or without defined relationships.

[0083] In yet another particular embodiment of the present invention there is provided a software development tool for developing a customised information system, the customised information system including instance, class, and attribute features, the software development tool able to perform a Spread of Activation function on at least one first instance in a given first class, thereby activating at least one second instance in at least one second class, the at least one first class having a defined relationship to the at least one second class. In one form, the defined relationship is a relationship category or a relationship type. Spread of Activation is further defined below.

[0084] In yet another particular embodiment of the present invention there is provided a computer-readable medium of instructions for developing a customised information system, the computer-readable medium of instructions including procedures to define relationship categories in the customised information system by specifying how each is piece of data used by the customised information system is related to each other piece of data used by the customised information system, thereby facilitating the customised information system to carry out all necessary data conversion required to conform any piece of information or data, used by the customised information system, to the defined relational requirements.

[0085] In yet another particular embodiment of the present invention there is provided a customised computer software system, utilising object oriented technology, in which relationships between data used in the customised computer software system are defined and the relationship definitions stored in a database for use by the customised computer software system, the relationship definitions not being reproduced in the main program code of the customised computer software system.

[0086] The following sub-headings outline features of preferred aspects of a form of the invention:

[0087] Spread of Activation:

[0088] Spread of Activation could also be described as a “drill” or a “drill down”. A Spread of Activation begins with one or more instances in a given class being activated (which means being temporarily marked in some way), and spreads to all instances in other classes that are related to those instances, according to the relationships defined between those classes. A spread of activation occurs recursively; that is, an activation can occur from class A to class B, then using the results of that activation another Spread of Activation can occur from class B to class C, etc, until the required related class has been activated. For example, to determine which customers had bought cars from a particular manufacturer, that manufacturer would be activated in, for example, the Manufacturer class, then a Spread of Activation is performed to, for example, the Car class, then a spread of activation is performed to, for example, the Sale class, and then a spread of activation is performed to, for example, the Customer class. All customers who had bought cars from that manufacture would now be activated in the Customer class.

[0089] Retrieve:

[0090] One of the functions of a program is to retrieve the values of attributes, of appropriate instances, within appropriate classes. Using prior art techniques, if given one or more instances in a first class, to retrieve the values of given attributes of all related instances in a second class, a program would need to understand how the classes are related. A program would have to be written with the relationships encoded inside the program.

[0091] In accordance with the present invention, any program, if given one or more instances in any one class, can use the “Spread of Activation” function/process defined above to locate all related instances in another class. The program can then retrieve the summed or concatenated values of given attributes of related instances in that second class, without the program itself containing the relationships between the classes. This occurs irrelevant of the number of steps required in the Spread of Activation between the two classes. The program does not need to encode how the classes are related.

[0092] Calculation:

[0093] A one-line program, in the general form of a mathematical formula, that may allow branching but does not allow repetition. A calculation is a specific form of the kind of program referred to in the preceding “Retrieve” subheading. Repetition is not required, as it is made redundant via the use of the Retrieve and Spread of Activation functions/processes described above.

[0094] Derivation:

[0095] Derivation uses a “Calculation” as described in the preceding sub-heading, attached to a particular attribute in a particular class. Each time an instance is to be updated into the class, the calculation is performed/evaluated, according to the preceding description, and the value of that attribute for that instance is set to the result of the calculation. The instance being updated is considered to be the “given” instance for the purposes of the Spread of Activation.

[0096] Validation:

[0097] Validation uses a calculation as described hereinbefore, attached to a particular attribute in a particular class. Each time an instance is to be updated into the class, the calculation is performed/evaluated, according to the preceding description, and if the result of the calculation has a particular value, for example 0, or falls within a particular range of values, the attribute has failed Validation. If one or more attributes fail Validation, the instance has failed Validation, and may not be written into the class. The instance being updated is considered to be the “given” instance for the purposes of the Spread of Activation.

[0098] Data Integrity:

[0099] Whenever an instance in a class is updated, the system can check whether any calculations anywhere in the system reference the class that was just updated. If there are calculations that reference the class that was updated, the system automatically carries out a Spread of Activation from the instance that was updated, to the classes that contain those calculations. All instances that were activated in the class which contains the calculations are then recalculated, and revalidated, and any changed instances are updated—if the instances have passed Validation. If the instances did not pass Validation, an error message can be produced. Depending on implementation of this embodiment of the invention, this may cause the first instance that was being updated, not to be updated. Every update of an instance begins this process, regardless of what caused the update. This should guarantee data integrity, and remove the requirement for much of the programming that is required in prior art techniques.

[0100] Drill Down:

[0101] Drill Down is the ability to find and report all instances in a given class which are related to given instances in another class, and is related specifically to some kind of search. A search would be carried out that activated instances in a given class, and then a Spread of Activation would be carried out until the class that was being drilled to was activated. The instances that were activated in the class being Drilled to are the results of the Drill. (The preceding example of determining which customers had bought cars from a particular manufacturer under Spread of Activation is an example of Drill Down. According to the present invention, this is achieved by the Spread of Activation function/process previously described, and therefore the relationships only need to be defined once, with all of the inherent advantages of only defining relationships once.)

[0102] In one form of the present invention, an information system is provided which allows classes to be able to be related in a flexible manner. FIG. 2 provides an illustration of an example of how database relationships could be structured according to an embodiment of the present invention. The relationships between these classes need only be defined in one place. Programs that need to derive data that is related to other data, do not understand how the data is related. That is, if a program needs to find all instances in class A that are related to a given instance(s) in class B, the program can derive the list of an related instances without knowing how they are related. This makes programs much shorter and easier to write and maintain. This also means that programs do not need to be altered when the relationship between classes changes. Programs that no longer require the understanding of how classes are related include programs that validate data, that derive data, and that are used for searching or “drilling”.

[0103] The following examples should not be construed as limiting to the present invention, but are provided so that the reader can contrast these examples, formed in accordance with an embodiment of the present invention, with the aforementioned prior art examples.

[0104] For example, if a program needed to retrieve the values of the attribute “Amount” from the class “Invoice”, it would only need to use code similar to the following:

[0105] Variable=Invoice.Amount

[0106] Most programs are replaced with calculations. A calculation is a program that does not contain recursion or looping, but can still contain branching. Because recursion and looping is not used, programs are much shorter and easier to write and to maintain, and require a lower level of knowledge and skill to create and maintain. Because calculations do not contain relationship rules, and they do not contain recursion or looping, most calculations may only be one line. In some cases, there could be extra attributes on some classes to allow the system to work correctly without requiring recursion or looping. Whenever a calculation in one class references an attribute in another class, all values for that attribute in related instances are summed or concatenated together. The attribute reference in the calculation is replaced by the summed or concatenated result in the calculation.

[0107] For example, if a program needed to retrieve the values of either the attribute “Amount” or the attribute “DiscountAmount”, depending on whether the customer received a discount or not, from the class “Invoice”, it could look like the following:

[0108] Variable=IF Customer.DiscountFlag=“Y” THEN Invoice.DiscountAmount ELSE

[0109] InvoiceAmount

[0110] Calculations can be used to perform validation and derivation. Every attribute on every class can have no calculations, or either a derivation or a validation calculation, or both a derivation and a validation calculation. Every instance will have been fully validated and derived before being written into the class. That is, all validation calculations would have been passed, and all derivation calculations would have been carried out and the values of the attributes set accordingly. Also, when any instance is updated anywhere in the database, and that update alters the values returned from any derived calculations anywhere in the database, the calculations can be automatically recalculated, the effected instances can be automatically updated, and the updated instances can be automatically written into the class. This may begin another circle of automatic updates. In a particular embodiment of the present invention, if a validation calculation returns a 0 or null (“”) result, the validation has failed, and if it returns a non zero and non null result, the validation has passed.

[0111] For example, if it was necessary to validate that a particular customer was entitled to purchase a given product, the Product attribute on the Sale class could have the following Validation calculation. This example could be of a wholesaler which sells any quantity of any products to a retailer, but only sells a limited range of products to individuals:

[0112] Customer.Type NE ‘Private’ OR Product.CustomerType=‘Private’

[0113] As a further example, if it was necessary to update a customer's balance whenever a new sale occurred, and whenever a payment was received, the Balance attribute on the Customer class could have the following Derivation calculation:

[0114] Sale.Amount−ReceivedAmount

[0115] Accordingly, the present invention seeks to provide these and other features providing an improved method of or new computer software for designing, developing and/or maintaining customised information systems.

BRIEF DESCRIPTION OF FIGURES

[0116] The present invention will become apparent from the following description, which is given by way of example only, of a preferred but nonlimiting embodiment thereof, described in connection with the accompanying figures, wherein:

[0117]FIG. 1 illustrates prior art database relationships;

[0118]FIG. 2 illustrates possible database relationships according to the present invention;

[0119]FIG. 3 illustrates an embodiment of the present invention wherein, the figure shows a data definition format;

[0120]FIG. 4 illustrates an example of a more detailed data definition format; and

[0121]FIG. 5 illustrates an embodiment of the present invention wherein, the figure shows a control class structure showing the relationships between the classes within the control structure.

MODES FOR CARRYING OUT THE INVENTION

[0122] The present invention provides an improved method of and new computer software for designing, developing and/or maintaining customised information systems.

I. PREFERRED EMBODIMENT

[0123] In one preferred embodiment of the present invention, the present invention alters the basic five step method by which a customised information system is presently created. Instead of the basic five step method discussed previously, the present invention requires the use of only three steps to provide a method by which a customised information system may be developed. These three steps, with a brief description of each step, are:

[0124] 1. Definition (Define the information that the industry or organisation uses; in the format of FIG. 3, Data Definition Format, and process that information through the procedure InfoBase.Create)

[0125] 2. Testing (Confirm that the industry or organisation for which the information system is being developed is satisfied that the resulting information system can fulfil their requirements)

[0126] 3. Implementation (Render the information system up and running and able t be used by the industry or organisation, including loading any data required)

[0127] The first three steps of the existing five step method are transformed into one step according to an embodiment of the present invention. This eliminates most of the requirement for documentation that presently exists with the existing five step method, and allows customised information systems to be developed and maintained in less time and at less expense than the existing five step method.

[0128] The first step required in the method of the present invention is simpler than the first three steps of the prior art method. Most of the analysis, design and coding steps required in the existing five step method are either not required, or are carried out by a computer readable medium of instructions, for example software, which is disclosed as a further embodiment of the present invention, without requiring human time or effort This further significantly decreases the time required to develop and maintain a customised information system, and further decreases the cost of a customised information system to an industry or organisation.

[0129] All information systems have two basic functions. The first is to take information in, convert it into the raw data that the information consists of, and then store that raw data in an electronic database (or information source). The second is to extract that raw data, reform the raw data into one or more kinds of information, and output that information.

[0130] Existing methods or software tools for developing information systems require the process of converting from information to raw data, or from raw data to information, largely defined by persons. Persons develop a series of computer commands that a computer then stores and executes to perform this conversion between raw data and information. These series of commands are sometimes called programs, modules, scripts, or applets, but there are also many other terms for these series of commands.

[0131] Information systems have been developed to do away with the need for some of these series of commands, but with existing information systems, these series of commands still need to be cod for some parts of the information system, if not for all parts.

[0132] The present invention provides a means for developing information systems which does not require human interaction to develop any of these series of commands. In accordance with the present invention, a person (or user) specifies how each of the pieces of data are related to each other piece of data so as to form information. The present invention then provides a means which carries out all conversions required to conform components of the information system to these relational requirements.

[0133] To further explain this concept, exising information systems require a person to add business logic specific to an organisation to the information system by developing programs of some sort. The present invention does not require the development of such programs. The term “information base” or “infobase” may be used to describe an embodiment of the present invention working with one or more databases to convert information to data, and data to information.

[0134] According to a specific embodiment of the present invention, the present invention can be described as an intelligent software tool, that understands how all data is related to all other data, and maintains all data in accordance with those rules. For example, if a customer order was written into a database, the software tool can maintain the customer balance and stock levels in accordance with the new order; as long as the software tool was informed that customer orders were related to customer balances, and stock levels, and how they are related. No additional programming when developing an information system is required to achieve this.

[0135] A further embodiment of the present invention also provides means which allow all data is in all attributes in all classes in all databases to be searched easily and flexibly. All data related in any way to the data found as a result of the search can also be retrieved easily and flexibly. “Drill down” is supported on every attribute in every class in every database. This is referred to within this document as “searches” or “selections”. “Drill down” refers to the ability to easily retrieve data that is related to particular other data.

[0136] Prior art techniques require custom written programs or other form of computer instructions at two times; when data is being updated into the system; and when data is being retrieved from the system. The present invention does not require custom written programs at either of these times. An example of the processing carried out by programs in the prior art could be updating a customer order into a system, and retrieving a customer order history from a system. At the time of updating the customer order into the system, the stock levels may be calculated and updated by a custom written program. At the time of retrieving a customer's order history, the total value of all orders may be calculated by another custom written program. The present invention enables all data that may be required to be calculated and stored in the database without using any custom written programs to achieve this. In this example, both the stock levels and the total value of a customer's orders could be calculated and updated at the time an order is updated into the system, based solely on the defined relationships between the data, therefore not requiring custom written programs.

[0137] The present invention is not limited to any particular means of receiving information from a user, another system, etc, or of rendering information to a user, another system, etc. Any means of entering data into a particular computer system, or outputting data from a particular computer system, may be used with the present invention.

[0138] In accordance with a further, but non-limiting, embodiment of the present invention, a computer readable medium of instructions is provided as a software tool. This software tool can be implemented using the following data definition, data structures and procedures. All classes (data structures) that have control in the software tool are called control classes, and can be stored within one database.

[0139] Data Definition

[0140] Data definitions are most easily created in a spreadsheet package, and then saved as comma delimited. The comma delimited file that is output is displayed in FIG. 3. An example data definition, that defines a simple Accounts Receivable information system, is shown in FIG. 4. Data definitions could also be created and maintained using other means, for example a graphical input and maintenance device.

[0141] Data Structures

[0142] The data such in brief include:

[0143] 1. Attribute (Definition of all attributes in all classes in all databases.)

[0144] 2. Calculation (Definition of all calculations related to all attributes.)

[0145] 3. CalculationPointer (Calculations can contain references to attributes. To speed up recalculating a calculated attribute when the referenced attributes change, this class is used as an index to the calculation class.)

[0146] 4. Cascade (Cascade is the term used to describe the process involved in all second level updates. When any cascade occurs, all details required to carry out that cascade are written into this class. The Cascade.Modify procedure processes the instances in this class.)

[0147] 5. Class (Definition of all classes in all databases.)

[0148] 6. Control (General control entries; such as Cascade enable/disable.)

[0149] 7. Database (Definition of all databases)

[0150] 8. ErrorLog (Any errors that occur with control classes or procedures are written into this table.)

[0151] 9. Index (Definition of all indexed attributes)

[0152] 10. InstanceRetrieved (Records when an instance was most recently retrieved by each user. Each instance in the database contains a field that defines when that instance was most recently updated. Whenever Instance.Update is about to update an instance, it checks that the user retrieved the instance since the most recent update of that instance. This ensures that one user's changes are not overwritten accidentally by another user.)

[0153] 11. Join (This class defines how every class is related to every other class. It is used when extending a search, when calculating attributes, and when validating instances.)

[0154] 12. Relation (Defines all relations that are valid for select commands, and relationships)

[0155] 13. Relationship (Defines how each class is related to neighbouring classes.)

[0156] 14. SelectInstance (Contains a list of all selected instances for all database, class and user combinations. Also contains a select version number. This number is used to determine which instances are currently selected, and which ones were selected but are not selected currently.)

[0157] 15. SelectSource (Records how often a particular attribute has been used in a select search. Can be used to determine where indexes could be added to speed up the system.)

[0158] 16. SelectStatus (Contains a list of all selected classes for each user. Also contains a select version number.)

[0159] 17. SelectVersion (Defines the current select version number for each user. Any entries in the SelectInstance and SelectStatus files with the same select version number are current selects.)

[0160] 18. Validation (Definition of all validations related to all attributes.)

[0161] 19. ValidationPointer (Validations can contain references to attributes. To speed up revalidating all related instances when an instance is added, updated or deleted, this class is used as an index to the Validation class.)

[0162] Data Structure Details

[0163] The data structures are given in more detail hereinafer. Those attributes marked with an asterisk (*) combine to form a unique key to each instance within the class. FIG. 5 illustrates Control Class Structures, which graphically represent how the various control classes are related to one another: 1. Attribute Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] Attribute* CHAR[30] Type CHAR[10] Position LONGINT Description CHAR[300] ErrorMessage CHAR[300]

[0164] 2. Calculation Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] Attribute* CHAR[30] Description CHAR[300] Calculation CHAR[3000]

[0165] 3. CalculationPointer Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] Attribute* CHAR[30] Occurrence* LONGINT PointerDatabase CHAR[30] PointerClass CHAR[30] PointerAttribute CHAR[30]

[0166] 4. Cascade Class Data Structure Attribute Type User* CHAR[30] Date* DATE Time* TIME Database CHAR[30] Class CHAR[30] NewInstance CHAR[3000] OldInstance CHAR[3000] ErrorMessage CHAR[3000]

[0167] 5. Class Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] NumberKeyParts LONGINT NumberAttributes LONGINT Description CHAR[300]

[0168] 6. Control Class Data Structure Attribute Type Name* CHAR[30] ControlData CHAR[3000]

[0169] 7. Database Class Data Structure Attribute Type Database* CHAR[30] Description CHAR[300]

[0170] 8. ErrorLog Class Data Structure Attribute Type UserName* CHAR[30] Date* DATE Time* TIME ErrorData CHAR[3000]

[0171] 9. Index Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] Attribute* CHAR[30] Description CHAR[300]

[0172] 10. InstanceRetrieved Class Data Structure Attribute Type User* CHAR[30] Database* CHAR[30] Class* CHAR[30] Key* CHAR[3000]

[0173] 11. Join Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] PointerDatabase* CHAR[30] PointerClass* CHAR[30] Occurrence* LONGINT JoinDatabase CHAR[30] JoinClass CHAR[30]

[0174] 12. Relation Class Data Structure Attribute Type Relation* CHAR[3]

[0175] 13. Relationship Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] PointerDatabase* CHAR[30] PointerClass* CHAR[30] Occurrence* LONGINT Attribute CHAR[30] PointerAttribute CHAR[30] Relation CHAR[3] Description CHAR[300]

[0176] 14. SelectInstance Class Data Structure Attribute Type User* CHAR[30] Database* CHAR[30] Class* CHAR[30] Key* CHAR[3000] Select LONGINT Sequence LONGINT

[0177] 15. SelectSource Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] Attribute* CHAR[30] Number LONGINT CreateDate DATE

[0178] 16. SelectStatus Class Data Structure Attribute Type User* CHAR[30] Database* CHAR[30] Class* CHAR[30] Select LONGINT DateSelected DATE TimeSelected TIME LastInstance CHAR[3000] NumberSelected LONGINT

[0179] 17. SelectVersion Class Data Structure Attribute Type User* CHAR[30] Select LONGINT

[0180] 18. Validation Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] Attribute* CHAR[30] Validation CHAR[3000] Description CHAR[300]

[0181] 19. ValidationPointer Class Data Structure Attribute Type Database* CHAR[30] Class* CHAR[30] Attribute* CHAR[30] Occurrence* LONGINT PointerDatabase CHAR[30] PointerClass CHAR[30] PointerAttribute CHAR[30]

[0182] Procedures

[0183] The procedures include:

[0184] 1. Cascade.Process (When a user updates a class (a “first level” update), that update may require other related classes to be automatically updated (“second level” updates). The Cascade.Update procedure ensures that these second level updates occur. Cascade.Process selects all instances in the Cascade class, and executes Cascade.Update for each one of those instances to carry out these second level updates.)

[0185] 2. Cascade.Update (Carries out the second level updates. Second level updates are updates that are not being made by a user. Cascade.Update is passed the name of a database and a class, and passed the details of an instance within that class, that has been updated. Cascade.Update selects all instance in the CalculationPointer class that reference that database and class. Cascade.Udpate uses Select.Set to set a current select, and then for every database and class selected from CalculationPointer, uses Select.Activate to extend the select to that database and class. It then uses Select.Get to retrieve all instances in that database and class that are related to the instance that was updated. It then uses Instance.Get to retrieve each related instance, and uses Instance.Update to update each instance back into the database and class. Instance.Update automatically recalculates every instance that it updates. This ensures that data integrity is maintained within all databases without requiring custom written programs to do so.)

[0186] 3. Class.ClearPointer (Closes all pointers to a particular class. Class.ClearPointer is used by InfoBase.Create prior to deleting a class. This is only required if the language a particular embodiment of the invention is being written in requires pointers to databases and classes, and does not allow classes that are currently pointed to to be deleted.)

[0187] 4. Class.SetPointer (Sets up a pointer to a particular class. This is used by most procedures in an embodiment of the invention. It is only required if the language the particular embodiment of the invention is being written in requires pointers to databases and classes.)

[0188] 5. Clean.Process (The Select . . . Processes listed below, eg. Select.Activate, create temporary instances in the Select . . . classes. The instances are used to control and track search results. These temporary instances can be deleted once the user has exited the system. This procedure cleans out those classes. The date and time each instance was written into each class is stored on the instance. Clean.Process selects all instances with a date and time older than, say, two hours ago, and then deletes those instances. This is usually required for performance reasons.)

[0189] 6. Edit (Allows the various other procedures to be tested and tialed. Edit is optional, but is useful for testing separate procedures when developing a particular embodiment of the invention. Edit lists all databases in the Database class, and allows the user to select one. It then lists all classes in the Class class for that database, and allows the user to select one. It then allows the user to search through that class in that database, and to view, edit, create or delete instances in that class. It uses the other procedures defined within this document to actually carry out the searching, retrieving, updating and deleting, thereby allowing the procedures to be tested individually.)

[0190] 7. ErrorLog.Put (If something goes wrong with the control data or procedures, this procedure handles the error, and records it in such a way that a system administrator can find out what the error was and take the appropriate action. It writes the errors onto the ErrorLog class, to be retrieved at a later time by the system administrator. Any procedure that encounters an error will use ErrorLog.Put to record the error, and will then exit, returning a flag warning that an error has occurred.)

[0191] 8. Expression.Evaluate (Every attribute in every class in every database can have a validation expression or a calculation expression with which it is associated. The validation expression determines whether the value of the attribute is valid. The calculation expression determines what the value should be of that attribute. It can include literals, text or attributes from any class and database, and functions, operations and statements. Expression.Evaluate is similar to a compiler or to a calculator, in that it parses each calculation, performing all functions as required, and returns the results of the calculation. The database, class and instance for which the calculation is being performed is passed into Expression.Evaluate. If Expression.Evaluate finds an Attribute reference within the calculation, and the Attribute is within the current database and class, it replaces the Attribute with the value of that attribute from the relevant instance (the instance that was passed in). If it finds an Attribute that is within a different database and class, it uses Select.Set to activate the relevant instance in the database and the relevant class. It then uses SelectActivate to activate all instances in the different database and class that are related to the relevant instance. It then uses Select.Get to retrieve a list of the related instances, and Instance.Get to retrieve each one of those instances. If the attribute being referred to is numeric, it adds up the values of that attribute in all the related instances. If the attribute being referred to is not numeric, it concatenates the values of that attribute in all the related instances. It then replaces that Attribute reference in the calculation with the added or concatenated values.)

[0192] 9. InfoBase.Create (Takes the definition created when defining an information system, sets up the databases, classes and attributes defined in the definition, and loads all the control classes with the necessary information to make it all work. The reader is further referred to the control class definitions.)

[0193] 10. Instance.Calculate (When an instance is being written to a class, this procedure uses the Expression.Evaluate procedure to evaluate the value of any calculated attributes. It selects all instances in the calculation class that refer to the database and class that the instance is being written to. It then calls Expression.Evaluate for every calculation instance, and replaces the value of the attribute that each calculation instance refers to with the value retered by Expression.Evaluate.)

[0194] 11. Instance.Get (Gets an instance from a database and class.)

[0195] 12. Instance.Lock (Locks a particular instance within a database and class, to ensure that it can only be used by one user or procedure at any one time. If the instance is already locked by someone else, it returns a warning that the instance is locked. Other procedures that use this instance handle the warning appropriately. Locking is required to ensure that data is not inadvertently lost if more than one user attempts to update the same instance at the same time.)

[0196] 13. Instance.Update (Adds an instance, updates an existing instance, or deletes an instance. Uses the Instance.Calculate procedure to calculate attributes. Uses the Instance.Validate procedure to ensure that the instance being added or updated is valid, and also to ensure that adding, updating or deleting the instance will not cause any other instances to become invalid. Uses Instance.Lock to lock the instance, and checks that no one else has updated the instance since this user retrieved the instance. If someone has updated the instance since this user retrieved it, an error is returned, and the instance is not updated, hereby preventing the accidental overwriting of data. Uses either Cascade.Update or Cascade.Process to carry out all second level updates. It uses Cascade.Update if the second level updates are to be carried out immediately on line, or Cascade.Process if the second level updates are to be carried out in background mode.)

[0197] 14. Instance.Validate (Ensures that the instance is valid. Tests for relational integrity using the various Select procedures, and tests for informational integrity using Expression.Evaluate. Instance.Validate operates in a very similar manner to Instance.Calculate, except that it uses the Validation class instead of the calculation class, and instead of setting the values of attributes in the instance being validated with the results of Expression.Evaluate, if Expression.Evaluate returns a value of blank or 0 for any attribute in the instance, that attribute has failed validation.)

[0198] 15. Select.Activate (Select processes can be thought of as filters on particular databases and classes. Only the instances included in the current select can be seen. Select processes start with Select.Alter, which selects the instances within a particular database and class. Select processes can be extended over many databases and classes, using Select.Activate. Select.Activate uses Select.Extend to achieve each step of this. It begins by retrieving the current select version from SelectVersion. It then selects all classes that have that select version from SelectStatus. It then finds which of those classes is closest to the database and class being activated, by processing through the Join class and finding the shortest number of links. It then uses Select.Extend to extend the select each step of the way, as defined within the Join class.)

[0199] 16. Select.Alter (Used to alter or create a current select. It is passed a database and class, a list of attributes on that database and class, a list of relationships, and a list of search data. Select.Alter uses Select.Search to return a list of instances on the given database and class that conform to the search data passed. It is also passed a select type. If the select type is New, it uses Select Set to set the list of instances as the current selected list of instances. If the select type is Expand, it adds the list of instances into the currently selected list of instances. If the select was a Shrink, it fins all instances that were selected previously and also exist in the list of instances, and sets only those instances as the currently selected set of instances. It uses Select.Set to actually set the list of instances as the currently selected set.)

[0200] 17. Select.Extend (Used by Select.Activate to extend a select from one database and class to a neighbouring database and class. Select.Extend uses the Relationship class to determine what attributes in one class are related to what attributes in the other class. It then performs a Join operation on the two classes, but only for the instance that were currently activated in the database and class being extended from.)

[0201] 18. Select.Get (Returns a list of all instances currently selected in a particular database and class. Used by other procedures. It retrieves the current select version from SelectVersion, and then retrieves all instances for the database and class with that select version from the SelectInstance class. It builds a list of instances from the Key attribute from the SelectInstance class, and returns that list.)

[0202] 19. Select.Search (Used by Select.Alter to actually search the database and class for all instances that conform to the given rules. It is passed a database, a class, a list of instances, a list of relationships, and a list of search values. It selects all instances from that database and class where the attributes conform to the relationships and search values, and returns a list of those instances.)

[0203] 20. Select.Set (Takes a list of instances, and sets the current select for a given database, class and user combination. Used by other procedures such as Select.Alter and Select.Extend. For each instances in the current select, it creates an instance in the SelectInstance class, setting the select version to the new or current select version.)

[0204] 21. User.New (Creates a new unique user number. Used internally by other routines. May not be required by some languages, or in some embodiments of the invention.)

[0205] Externally Accessible Procedures

[0206] The following procedures can be accessed directly from other external programs. This allows a software embodiment of the present invention to be used by other information systems or programs. This enables information that is not in an electronic format to be rendered into an electronic format and passed into a software embodiment of the present invention, and enables information in an electronic format in a software embodiment of the present invention to be output in non electronic formats.

[0207] 1. Cascade.Process (When an instance is added, updated or deleted using Instance.Update, one of the options determines whether second level updates should be carried out immediately and on line, or in background mode, or be carried out at a later, undefined time. If a later, undefined time is chosen, Cascade.Process can be executed to carry out those second level updates.)

[0208] 2. Clean.Process (This should be run as part of housekeeping, to clean unneeded instances out of control tables.)

[0209] 3. InfoBase.Create (Once a definition has been created, it can be loaded into the control tables via this routine.)

[0210] 4. Instance.Get (s used to retrieve an instance from the database.)

[0211] 5. Instance.Update (Is used to add an instance, update an existing instance, or delete an instance. It can carry out all validation, and if the instance fails validation, inform a user why. It may also ensure that all second level updates occur. One of the options determines whether second level updates should be carried out immediately and on line, or in background mode, or be carried out at a later, undefined time. If a later, undefined time is chosen, Cascade.Process will need to be executed to carry out those second level updates.)

[0212] 6. Select.Activate (f a user already has a current select, and they want to extend that select to any other database and class, Select.Activate is used.)

[0213] 7. Select.Alter (Used to alter or create a current select.)

[0214] 8. Select.Get (If a user desires to know what instances are selected in a particular database and class, Select.Get is used. The user should use either Select.Alter or Select.Activate first to make sure there is a valid current selection for the database and class. If there is no valid current selection, Select.Get simply returns a blank list.)

II. FURTHER EXAMPLES

[0215] The following examples provide a more detailed outline of one embodiment of the present invention. These examples are intended to be merely illustrative and not limiting of the scope of the present invention.

[0216] The following details are broadly grouped by categories and aspects of these categories then identified. Use of the indicia, for example <= or ==>, should be appreciated by the reader to be an arbitrary, although reminiscent, use. It is quite feasible to substitute other indicia as a label for the underlying functionality.

[0217] 1 Extended Relational Integrity

[0218] 1.1. Valid relationship categories are <, <=,=, =>, >, and <>.

[0219] 1.2. Valid relationship types are <<, <, <=, <=, <==, =, ==>, =>, =>>, >, >>, <<>> and <>.

[0220] 1.3. The relationship types (defined in 1.2) are related to the relationship categories (defined in 1.1) according to the following sets. The items within each pair of brackets form one set. The first item in each set is the relationship category, and the remaining items in each set are the related relationship types. (<, << and <), (<=, <<=, <=, <==), (=, =), (=>, ==>, =>, =>>), (>, >, >>),and (<>, <<><>><>).

[0221] 1.4. Any attribute can be related to any other attribute with any one of the relationship types (defined in 1.2).

[0222] 1.5. In any relationship (defined in 1.4), one attribute is the child attribute, and the other attribute is the parent attribute.

[0223] 1.6. The data in any child attribute (defined in 1.5) is only valid if it is related to data in the parent attribute by the defined relationship category (defined in 1.1, 1.2 and 1.3).

[0224] 1.7. The data in the parent attribute (defined in 1.5) is valid unless altering data in the parent attribute would cause data in the child attribute to be invalid (defined in 1.5 and 1.6).

[0225] 1.8. An instance is only valid if all child and parent attributes are valid (defined in 1.6 and 1.7).

[0226] 1.9. An instance is only stored in a class if the instance is valid (defined in 1.8).

[0227] 2. Related Instances

[0228] 2.1. Relationship types <, <=, =, =>, > and <> are multiple instance relationship types.

[0229] 2.2. Relationship types <<, <<=, <==, =>, =>, >>, <<> and <>> are single instance relationship types.

[0230] 2.3. Any class with a child attribute is a child class.

[0231] 2.4. Any class with a parent attribute is a parent class.

[0232] 2.5. Any class can be neither, either, or both, a child class and a parent class.

[0233] 2.6. A primary instance is tentatively related to all secondary instances in one class where the relationship between the data in the attributes of the primary instance and the data in the attributes of the secondary instances conform to the relationship types for those attributes.

[0234] 2.7. When all related attributes between two classes are related with multiple instance relationship types, an instance in either class can have multiple related instances in the other class, and all tentatively related instances are confirmed related instances.

[0235] 2.8. When one or more related attributes between two classes are related with single instance relationship types, an instance in the child class will only have one single related instance in the parent class, only one of the tentatively related instances will be a confirmed related instance, and it will be chosen according to which single instance relationship type is used.

[0236] 2.9. When one or more related attributes between two classes are related with single instance relationship types, an instance in the parent class can have multiple instances in the child class.

[0237] 2.10. When one or more related attributes between two classes are related with single instance relationship types, only one of the tentatively related parent instances will be confirmed related to the child instance, and it will be chosen according to which single instance relationship type is used. An instance in the parent class is related to all instances in the child class that are related to the parent instance.

[0238] 2.11. Which tentatively related instance will become a confirmed related instance is chosen according to the rule: when the single instance relationship type <<, <<=, ==> or <<>, choose the matching parent instance with the least value in the related attribute, and when the single instance relationship type is <==, =>>, >> or <>>, choose the matching parent instance with the greatest value in the related attribute.

[0239] 2.12. A primary instance is indirectly related to all secondary instances in one class where the secondary instances are not confirmed related to the primary instance (defined in 2.1), but the secondary instances are confirmed related (defined in 2.1) to other instances which are either confirmed or indirectly related to the primary instance.

[0240] 2.13. All instances that are either confirmed related or indirectly related are related.

[0241] 3. Calculations

[0242] 3.1. A calculation is related to an attribute of a class.

[0243] 3.2. A calculation can contain a combination of literals, references, functions, operations and statements.

[0244] 3.3. Literals are literal values, such as text or numbers, and are optionally surrounded by quotes.

[0245] 3.4. References are references to attributes, either in the format “attribute” or “database.class.attribute”.

[0246] 3.5. When a reference is in the format “attribute”, it refers to the value of that attribute in the instance that the calculation is being carried out for.

[0247] 3.6. When a reference is in the format “database.class.attribute”, it refers to the accumulated value of “attribute” of all instances in “database.class” that are related to the instance that the calculation is being carried out for.

[0248] 3.7. Functions are in the format “functionname(value)”, and return the result of value after the function has been carried out.

[0249] 3.8. Operations are in the format “value1 operation value2”, and return the result of value1 after operated on by value2.

[0250] 3.9. Statements are in the format “statement1 (value1) statement2 (value2) [statement3 (value3)] etc, and return the value of value2, value3, value4, etc. Which value they return is dependant on value1.

[0251] 3.10. “value”, “value1”, “value2”, “value3”, etc can be any combination of literals, references, functions, operations or statements.

[0252] 4. Informational Integrity

[0253] 4.1 Information integer consists of an informational calculation attached to each attribute to be automatically updated to be kept in integrity.

[0254] 4.2 When an instance is about to be written, the every attribute of that instance that has an informational calculation has the calculation worked out.

[0255] 4.3 When the calculation is worked out, the resulting value is placed in the attribute of the instance.

[0256] 4.4 The instance is only written once all attributes with an informational calculation have been calculated and updated.

[0257] 5. Calculated Validation

[0258] 5.1. Calculated validation consists of a validation calculation attached to each attribute to be automatically validated.

[0259] 5.2. When an instance is about to be written, every attribute of that instance that has a validation calculation has the calculation worked out.

[0260] 5.3. If the value returned from the calculation is not a particular value or does not fall within a particular range of values, the attribute value is valid.

[0261] 5.4. If the value returned from the calculation is a particular value or falls within a particular range of values, the attribute value is invalid.

[0262] 5.5. If any attribute values are invalid, the instance is not written.

[0263] 6. Searching and Selects, Drill Down, Up and Sideways

[0264] 6.1. Search results are stored in a controlling class for as long as the user that requested the search remains logged in, and until the user carries out a subsequent search.

[0265] 6.2. There are three different kinds of searches; New, Expand and Shrink.

[0266] 6.3. A New search ignores the results of the previous search and only returns the results that fit the current search parameters.

[0267] 6.4. An Expand search adds the results of the current search parameters onto the results of the previous search.

[0268] 6.5. A Shrink search only includes the intersection of the current search parameter results and the previous search results. That is, instances are only included if they were included in both the previous and the current search results.

[0269] 6.6. If requested, the search results can be extended beyond the class(instances) search by identifying related instances in the classes the results are to be extended to, and including those related instances in the stored results of the current search.

[0270] References to the terms connecting, communicating, transmitting, requesting, receiving, exchanging and the like, and permutations thereof, should be taken to broadly pertain to the transfer of information or data.

[0271] Thus, there has been provided in accordance with the present invention, an improved method of and new computer software for designing, developing and/or maintaining customised information systems which satisfies the advantages set forth above:

[0272] The invention may also be said broadly to consist in the parts, elements and features referred to or indicated in the specification of the application, individually or collectively, in any or ah combinations of two or more of said parts, elements or features, and where specific integers are mentioned herein which have known equivalents in the art to which the invention relates, such known equivalents are deemed to be incorporated herein as if individually set forth.

[0273] Although the preferred embodiment has been described in detail, it should be understood that various changes, substitutions, and alterations can be made herein by one of ordinary skill in the art without departing from the scope of the present invention as hereinbefore described and as hereinafter claimed. 

1. A method of providing a Spread of Activation, the Spread of Activation used for determining which instances in a second class in a customised information system are related to other instances in a first class in the customised information system, the method including the steps of: (1) activating the first class; (2) activating at least one instance in the first class; (3) determining the shortest path between the first class and the second class; (4) identifying an active class and a next class for each step in the determined shortest path between the first class and the second class, and for each step: (A) retrieving relationship rules between the active class and the next class; (B) for each active instance in the active class, activating related instances in the next class according to the relationship rules; (C) activating the next class which thereafter becomes the active class; and, (D) repeating steps (A) to (D) until the second class is reached or no related instances are located.
 2. The method according to claim 1, wherein the first class is the initial active class.
 3. A method of providing a retrieve function, utilising the method according to claim 1, the retrieve function returning a value of an attribute in the second class related to an instance in the first class, the method including the steps of: (1) using the Spread of Activation to determine which instances in the second class are related to the instance in the first class; and, (2) obtaining the value of the attribute for the instance in the second class for each instance in the second class which is related to the instance in the first class.
 4. A method of providing a retrieve function, utilising the method according to claim 1, the retrieve function returning a value of an attribute in the second class which is related to an instance in the first class, the method including the steps of: (1) using the Spread of Activation to determine which instances in the second class are related to the instance in the first class; (2) setting a result value to null; (3) for each instance in the second class which is related to the instance in the first class: (A) obtaining the value of the attribute for the instance in the second class; (B) if the value of the attribute and the result value are both numeric, adding the value of the attribute to the result value; (C) if the value of the attribute and the result value are not both numeric, concatenating the value of the attribute to the result value; and, (4) returning the result value.
 5. A method of providing a calculation function, utilising the retrieve function according to either claim 3 or claim 4, the calculation function being attached to an attribute in the first class and used to derive the value of the attribute in the first class from related attributes in the second class, and/or one or more absolute values.
 6. A method of providing a derivation function, using the calculation function according to claim 5, the derivation function being attached to an attribute in the first class, whereby the calculation function is performed each time any instance is created or updated in the first class containing the attribute.
 7. The method according to claim 5, wherein the calculation function provides a validation function.
 8. The method according to claim 7, wherein the validation function is attached to an attribute in the first class, and: (1) the calculation function is performed each time any instance including the attribute in the first class is created or updated; (2) if the result of all the calculations for that class for that instance is true, then the instance is valid and is stored in the first class; (3) if the result of one or more of the calculations is false, then the instance is invalid, and is not stored in the first class.
 9. A method of providing data integrity when creating, updating or deleting an instance in a first class, utilising the method according to claim
 1. 10. A method of providing data integrity, utilising the method according to claim 6, wherein the method of providing data integrity includes the steps of: (1) selecting an instance in a CalculationPointer class which refers to the first class; (2) identifying a class pointed to by the instance in the CalculationPointer class, the identified class being the second class; (3) performing the Spread of Activation from the instance in the first class to the second class; and, (4) for each activated instance in the second class: (A) retrieving the instance from the second class; and, (B) updating the instance in the second class.
 11. A method of providing a drill down function, utilising the method according to claim 1, the method including the steps of: (1) selecting one or more instances in the first class which satisfy selected criteria: (2) selecting the second class; and, (3) performing the Spread of Activation from each selected instance in the first class to the selected second class.
 12. The method as claimed in claim 11, wherein a further drill down function can be performed from the resulting activated instances in the second class.
 13. The method as claimed in claim 12, wherein the further drill down function is performed on an AND, OR, or NOT basis relative to the initial drill down function.
 14. The method as claimed in claim 1, wherein activating the first class is effected by creating an instance in a SelectStatus class for the first class.
 15. The method as claimed in claim 1, wherein all instances in the first class are activated.
 16. The method as claimed in claim 1, wherein activating instances in the first class is effected by creating an instance in a SelectInstance class for each instance in the first class.
 17. The method as claimed in claim 1, wherein determining the shortest path between the first class and the second class is achieved by retrieving the path from a Join class.
 18. The method as claimed in claim 1, wherein the relationship rules between the active class and the next class are obtained by retrieving the relationship rules from a Relationship class.
 19. The method as claimed in claim 1, wherein activating related instances in the next class according to the relationship rules is effected by retrieving the relationship rules from a Relationship class and selecting all instances in the next class which are related to the active instance according to the relationship rules.
 20. The method as claimed in claim 1, wherein related instances in the next class are activated by creating an instance in a SelectInstance class for the related instances in the next Class.
 21. The method as claimed in claim 1, wherein activating the next class is effected by creating an instance in a SelectStatus class for the next class.
 22. A system for providing a Spread of Activation, the Spread of Activation used for determining which instances in a second class in a customised information system are related to other instances in a first class in the customised information system, the system including: (1) means to input relationship rules; (2) a database to store the relationship rules; (3) a processor adapted to: (A) activate the first class; (B) activate at least one instance in the first class; (C) determine the shortest path between the first class and the second class; (D) identify an active class and a next class for each step in the determined shortest path between the first class and the second class, and for each step: (i) retrieve relationship rules between the active class and the next class; (ii) for each active instance in the active class, activate related instances in the next class according to the relationship rules; (iii) activate the next class which thereafter becomes the active class; and, (iv) repeat steps (i) to (iv) until the second class is reached or no related instances are located.
 23. The system as claimed in claim 22, the processor being adapted to perform the method of any one of the claims 1 to
 21. 24. A computer readable medium of instructions for providing a Spread of Activation, the Spread of Activation used for determining which instances in a second class in a customised information system are related to other instances in a first class in the customised information system, the computer readable medium of instructions adapted to: (1) activate the first class; (2) activate at least one instance in the first class; (3) determine the shortest path between the first class and the second class; (4) identify an active class and a next class for each step in the determined shortest path between the first class and the second class, and for each step: (A) retrieve relationship rules between the active class and the next class; (B) for each active instance in the active class, activate related instances in the next class according to the relationship rules; (C) activate the next class which thereafter becomes the active class; and, (D) repeat steps (A) to (D) until the second class is reached or no related instances are located.
 25. The computer readable medium of instructions as claimed in claim 24, the computer readable medium of instructions adapted to perform the method of any one of the claims 1 to
 21. 26. The computer readable medium of instructions as claimed in either claim 24 or claim 25, wherein the computer readable medium of instructions are part of a software development tool which assists a user to develop or maintain the customised information system. 